package com.lifang.framework.beans.factory;

import com.lifang.framework.beans.BeansException;

import java.lang.annotation.Annotation;
import java.util.Map;

/**
 * 可列出的bean工厂
 */
public interface ListableBeanFactory extends BeanFactory {

    /**
     * 按照类型返回 Bean 实例
     */
    <T> Map<String, T> getBeansOfType(Class<T> requiredType) throws BeansException;

    /**
     * 返回注册表中所有的Bean名称
     */
    String[] getBeanDefinitionNames();

    /**
     * 根据注解查找bean
     */
    Map<String, Object> getBeansWithAnnotation(Class<? extends Annotation> annotationType) throws BeansException;

    /**
     * 根据类型返回已注册的beanName
     */
    String[] getBeanNamesForType(Class<?> requiredType);
}
